Redux「GET リクエストは更新系」
何を言ってるんだと思うかもしれないが、 #Redux を他の状態管理ライブラリ(たとえば SWR など)と比較したときの本質の一端としてこれがあると思っている。 たとえ action の中で参照系の API を叩いていようが、とってきた結果を store に入れる以上それは store に対する更新系だ、という思想が Redux にはある。
というか、あらゆる外部リクエストは store を更新する仮定で生じる副作用なので、API が更新系か参照系かは一切関係がない。
Redux における「参照系(があるとしたら)」とは selector、旧くは react-redux における mapStateToProps だけを指す。action は常に更新系、CQRS の C だという発想がないと設計で混乱すると思う。
逆に言うと Redux を選択するっていうことはこの思想を受け入れるってことでもあるので、Read がメインで状態の更新が少ないケースでは、複雑度に関係なく選ばないほうが良いと思う。
これと対照的なのが SWR とか react-query で、あいつらは逆に POST リクエストも結局 Read の一種だと主張するような趣がある。
更新系の API って、要するに更新した結果の最新状態をとるための手段ですよね?みたいな。とってきた結果を表示するための手段として POST や PATCH や DELETE がある。古き良きサーバーサイドフレームワークの考え方もこっちに近いと思う( POST リクエストの結果としてビューをレンダリングするのが昔は普通だったよね )
状態管理系ライブラリは、サーバーサイドを基準に更新系と参照系を峻別しようとすると選定を誤るみたいなところがある。
余談だが、 #GraphQL の文脈で「apollo は参照系だと嬉しいけど更新系には使いたくない」みたいな主張をときどき聞くことがある。 が、これは apollo もまた先の例で言う後者(更新系リクエストも結局 Read の一種)に近いライブラリという理解がないために出てくる意見だと思っている。後者の思想が受け入れられるケースなら、API が更新系であっても普通に使って良さそうに見えるんだよな(…と GraphQL 運用経験がロクにない人間が言ってみる)